C语言指针2

作者: 潇湘候晨雪 | 来源:发表于2017-08-28 17:38 被阅读10次

char * string =“I  LOVE china”;

在C 语言中 只有字符变量,没有字符串变量。

char *string; // 定义一个 char *  型变量。(字符指针变量);

string =“i love china”;

注:string 被定义为一个指针变量,基类型为字符型。只能指向一个字符型数据,而不能指向多个字符数据,只接受首地址。

//=====================

# include

int main( )

{

char a[ ] =“I am a man”,b[20];

int i;

for(i = 0;*(a+i) !=‘\0’;i++)

{

*(b + i) = *(a + i);

}

*(b + i) =‘\0’;

printf(“string a is :%s\n”,a);

printf(“string b is:”);

for(i = 0;b[i] !=‘\0’;i ++)

printf(“%c”,b[i]);

printf(“\n”);

return 0;

}

// ===== 指针处理===

char a []=“I am a man”,b[20],*p1,*p2;

p1 = a;p2 = b;

for(;p1 !=‘\0’;p1++,p2++)

*p2 = *p1;//将p1所指向的元素的值赋给p2 所指向的元素;

*p2 =‘\0’;

printf(“string a is :%s\n”,a);

printf(“string b is :%s\n”,b);

//============

2.字符指针 作为 函数参数

如果想把字符串 从一个 函数 传递到 另一个函数 ,可以用地址传递的方法,即用字符数组名作参数,也可用字符指针变量 作 参数。在被调用的函数中 可以 改变 字符串 的内容 ,在主调函数中可以引用改变后  字符串。

、用函数实现字符串的复制

void copy_string(char from[],char to[])

{

int i;

while(from[i] !=‘\0')

{

to[i] = from[i];i++;

}

to[i] =‘\0’;

}

void copy_string(char *from,char *to)

{

for(;*from !=‘\0’,from++,to++)

{

*to = *from;

}

*to =‘\0’;

}

//======

、指针变量的值可以改变,而数组名代表一个固定的值(数组元素的地址),不能改变。

、字符数组中各元素的值可以改变,但是字符指针变量指向的字符串常量中内容是不能被取代的。

char a[] =“house”;

char *b =“house”;

a[2] =‘r’;b[2] =‘r’;(非法的)

、引用数组元素。对字符数组可以用下标法一个数组元素,如a[5]; 也可以用地址法  *(a + 5);如果定义了字符指针变量  p,并使它指向字符数组首元素。就可以用指针变量带下标的形式引用字符数组元素(P[5]),同样,可以使用地址符号 *( p + 5);

、用指针变量指向一个格式字符串,可以用它代替格式字符。

char *format;

format =“a = %d,b=%f\n"

但是使用 字符数组时,只能采用 在定义数组时初始化,或者逐个对元素赋值,而不能对数组名 整体赋值。

2、指向函数的指针

在程序中定义了一个函数,在编译时,编译系统会自动为代码分配一段存储空间,这段存储空间的起始地址(又称入口地址),称为正饿函数的指针。

如何定义: 类型名 (*指针变量名)(函数参数表列)

类型名:函数返回值类的型

函数参数列表:形参的类型

int max(int ,int );

int min(int ,int);

int(*p)(int x,in y);

int a,b,c,n;

printf(“enter  a  and b:")

scanf(“%d,%d”,&a,&b);

printf(“choose 1 or 2:")

scanf(“%d”,&n);

if(n == 1) p = max;

else if (n ==2) p = min;

c = (*p)(a,b);

printf(“a = %d,b= %d”,a,b);

if ( n == 1) printf(“max = %d”,c);

else printf(“min = %d”,c);

return 0;

int max(int x,int y);

int min(int x,int y);

一个指向函数的指针变量  可以指向不同函数

3.用指向函数的指针   作为函数参数

指向函数的指针变量 的 一个 重要用途 是 把 函数的地址 作为参数传递 到其他 函数

int add(int x,int y)

{

int z;

z = x + y;

return z;

}

int min (int x,int y)

{

int z ;

z = (x > y) ? y:x;

return z;

}

int max(int x,int y)

{

int z;

z = (x > y) ? x : y;

return z;

}

int fun(int x,int y,int (*p) (int ,int)) // 声明形参 是 指向 函数的指针

{

int result;

result = (*p)(x,y);

printf(“%d\n”,result);

}

int main( )

{

int a =34,b = -21,n;

printf(“choose the number 1,2 or 3:”);

scanf(“%d”,&n);

if (n == 1)   fun(a,b,max); // max 作为实参 将其入口地址 传送给 fun中的形参 P;

if (n == 2)   fun(a,b,min);

if(n == 3)    fun(a,b,add);

return 0;

}

//===========================================

3、返回指针值的函数

一个函数 可以返回 一个整型值、字符值、实型值等 ~,也可返回指针型的数据。

int * a(int x,iint y); a 是函数名,调用它以后能得到 一个 int * 型(指向整形数据)的指针,即整型数据的地址。()优先级 高于 *; a 先与()结合,显然是函数形式。函数前面有* 。表示此函数是函数型指针(函数值时地址),最前面的int 表示 返回的 指针 指向整型变量。

类型名 * 函数名(参数表列);

有 a 个学生,每个学生有  b 们成绩。要求在学生输入学生 序号以后,能输出 该生的全部成绩。

// 数组 存放 成绩;查询学生成绩的函数 ,它是一个返回 指针 的函数,形参是指向 一维数组的 指针变量和整形变量。从主函数 将 数组名 和 score 和要找的 学生号 k    传递给形参,返回值 是& score[K][0];

# include

int main( )

{

float score[][4] = {{60,70,80,90},{56,89,67,88},{34,78,90,66}};

float *search (float (*pointer)[4],int n);

float *p;

int i ,k;

printf(“enter the number of student:”);

scanf(“%d”,&k);

printf(“the score of No.%d are :\n”,k);

p = search(score ,k);

for(i = 0,i < 4.i++) printf(“%5.2f\t”,*(p +i));

printf(“\n”);

return 0;

}

float *search(float(* pointerp[4],int n))

{

float *pt;

pt = *(pointer +n);

return pt;

}

//==============

int main()

{

float score[][4] = {{60,70,80,90},{56,89,67,88},{34,78,90,66}};

float *search (float (*pointer)[4],int n);

int *p;

int i,j;

for(i = 0;i < 3;i++)

{

p = search(score + i);

if (p == *(score + i))

{

printf(“No.%d score:”,i)

for (j = 0;j < 4;j++)

printf(“%5.2f  “,*(p+j))

}

}

return 0;

}

float *search (float (*pointer)[4],int n);

{

int i = 0;

float *pt;

pt = NULL;

for(;i < 4;i++)

if (*(* pointer +i) < 60)  pt = pointer;

return pt;

}

//===============================

指针数组 和多重指针

类型名 * 数组名[]

# include

# include

int main( )

{

void sort(char *name[ ],int n);

void print(char *name[ ],int n);

char * name[ ] = {“Follow me”,”BASIC”,”Great Wall”,”FORTRAN”,”Competer design”};

// 定义指针数组 ,它的元素 分别 指向5个字符串

int n = 5;

sort(name,n);

print(name,n);

return 0;

}

void sort(char * name[ ],int n)

{

char *temp;

int i,j,k;

for(i = 0;i < n-1;i++)

{

k =i;

for(j = i +1;j < n;j++) if (strcmp(name[k],name[j]) > 0) k = j;

if(k != i )

{

temp = name[i];name[i] = name[k]; name[k] = temp;

}

}

}

void print(char *name[ ],int n)

{

int i;

for(i = 0;i < n;i++) printf(“%s”,name[i]);

}

相关文章

  • [Swift]结构体指针操作

    C语言的指针操作 在c语言中申明一个变量并通过指针修改该变量的值 a value is 2 c语言操作结构体指针操...

  • C语言05- 指针

    C语言05- 指针 13:指针 指针是C语言中的精华,也是C语言程序的重点和难点。 13.1:指针定义与使用 指针...

  • C语言:指针2

    一、指向数组的指针变量 1、指向数组元素的指针变量 由于数组元素与普通一样,所以定义指向数组元素的指针变量与定义指...

  • C语言指针2

    char * string =“I LOVE china”; 在C 语言中 只有字符变量,没有字符串变量。 cha...

  • 链表代码注意事项

    1、理解指针或引用的含义 比如C语言是指针,就是相当于JAVA的引用 2、警惕指针丢失和内存泄漏 C 语言,内存管...

  • 02-C语言的指针

    02-C语言的指针 目标 C语言指针释义 指针用法 指针与数组 指针与函数的参数 二级指针 函数指针 指针在C中很...

  • C语言指针总结大学霸IT达人

    C语言指针总结大学霸IT达人 C语言的指针是C语言区别其它语言的最主要的特定之一。有了指针,C语言就可以抛开所有束...

  • 带小白学C语言指针

    C语言里指针才是C语言的开始和指针;C语言里基本所有东西都是由指针演变而成; 指针是指向地址的变量,类型就是指针...

  • 说下你对C语言指针的理解

    1、指针就是内存的地址,是C语言中广泛使用的一种数据类型。运用指针编程是C语言最主要的风格之一。 2、C语言允许用...

  • 在Swift中使用C语言的指针

    在Swift中使用C语言的指针 在Swift中使用C语言的指针

网友评论

    本文标题:C语言指针2

    本文链接:https://www.haomeiwen.com/subject/ttvgdxtx.html