1.定义一个整形指针:
int *p; int * p;
指针:就是一个变量 ,指针的变量类型我们可以看作为int * ----类型名 p--- 变量名
2.指针变量赋值为0
int *p = NULL(数字表示为0) //指针变量初始化为0;
int a=0;
3.指针变量赋值,也就是改变指针的指向
int a = 100;
int *p = &a;
*p = 100-50;
printf("a = %d\n", a);
int main()
{
int b = 10;
int a = 100;
int *p = &a;
*p = 100-30;
p = &b;
printf("a = %d *p = %d\n", a, *p);//a = 70 *p = 10
printf("%p %p\n", &b, p);//0xbf967f54 0xbf967f54
return 0;
}
int main()
{
int *p = NULL, *q = NULL;
int a = 3, b = 4;
int *temp = NULL;
p = &a;
q = &b;
printf("before *p = %d *q = %d", *p, *q);
temp = p;
p = q;
q = temp;
printf("after *p = %d *q = %d", *p, *q); //before *p = 3 *q = 4 after *p = 4 *q = 3 a = 3 b = 4
int temp;
temp = *p;
*p = *q;
*q = temp;
printf("a = %d b = %d", a, b); //a = 4 b = 3
return 0;
}
*/
/*
#include<stdio.h>
int main()
{
int *p = NULL;
int arr[5] = {1,2,3,4,5};
int i;
p = arr;
for(i=0;i<5;i++)
{
printf("%d\n", arr[i]);
}
for(i=0;i<5;i++)
{
printf("%d\n", *p);
p = p+1;
}
printf("%d\n", *p);
printf("%d\n", *(p+1));
printf("%p\n", p);
printf("%p\n", p+1);
printf("\n");
return 0;
}
*/
/* 1.字符串q
存储一行字符的数组
char arr[5]={'A','B','C','D','E'};
for(i=0; i<5; i++)
{
printf("%c", arr[i]);
}
2.字符串:存储一行字符的数组,然后有个结束标示符\0;
char string[]={'A','B', 'C','\0'};
printf("%s\n", string); //打印出字符串内容
3.在定义的时候就初始化
char string[]={'A','B', 'C','\0'};
char string[]="ABCD";
char string[5]={'a','d','c','b','\0'};
4.在定义之后再初始化
char string[20];
for(i=0; i<20;i++)
{
string[i]=getchar(); //输入一个字符串
gsts(string); //此操作很危险,因为你输入的字符个数很有可能超过你设定的数组的长度。
}
scanf("%s", string);
gsts(string); //此操作很危险,因为你输入的字符个数很有可能超过你设定的数组的长度。
5.输出一个字符串
printf("%s", string);
puts(string);
6.字符数组和字符串的区别:
唯一的区别就是字符串有一个结束标识'\0'.定义一个字符数组。看它是不是字符串,就看它有没有结束标识符'\0';
例:
char string[5]={'a','b','c','d','e'};
char string[]="abcde";
通过 sizeof(string);可以求出数组所占空间的大小,因为char 占一个字节,所以可以用sizeof(string)求出大小。
区别2:
在字符数组元素填满的情况下,不要用puts(string);或者printf("%s\n", string);来输出字符数组。因为puts函数
和printf的%s方式输出的是字符串,遇到'\0'才结束输出。而我的字符数组在填满的情况中没有'\0',所以输出的时
侯就越界了。
解决办法:定义足够大的数组
char string1[5]={'a','b','c','d','e'};
char string[6]="abcde";
printf("%s\n",string1);
printf("%s\n",string);
puts(string);
区别3:
在字符数组不填满的情况下,我们是可以用puts和printf的%s格式来输出字符数组的。因为这个时候的字符数组相当
于一个字符串。
char string[5]={'a','b','c'};
数组的部分初始化,未初始化的部分为0,而0和'\0'的值是相等的,所以可以用这两种方式输出。
*/
/*
int main()
{
char string[5] = {'A', 'B', 'C', 'D', 'E'};
int i;
for(i=0; i<5;i++)
{
printf("%c\n", string[i]);
}
printf("\n");
return 0;
}
*/
/*
int main()
{
char string[20];
int i;
for(i=0; i<20; i++)
{
string[i]=getchar();
}
for(i=0;i<20; i++)
{
printf("%c\n", string[i]);
}
printf("\n");
return 0;
}
*/
/*
int main()
{
int i;
char string[5];
//char string[] = {'A', 'B', 'C', 'D', 'E','\0'};
for(i=0; i<5; i++)
{
string[i]=getchar();
}
printf("%s\n", string); //ABCDE
puts(string); //ABCDE
printf("%d\n", sizeof(string));
return 0;
}
*/
/*
int main()
{
char string[]={'a','b','c','d','e'}; //数组
char string1[]="abcde"; //字符串
printf("%s\n",string);
printf("%s\n",string1);
puts(string); //输出字符串,同printf,比printf多了自动换行
puts(string1);
printf("string = %d string1 = %d\n", sizeof(string),sizeof(string1));
//abcdeabcde
//abcde
}
*/
/*
#include<string.h>
int main()
{
int i;
char name[20] = "douyajuan";
char string[20] = "hello";
int len;
//scanf("%s",string);
strcpy(name,string); //替换string的内容到name
len = strlen(name); //求字符串长度
printf("len = %d\n", len);
for(i=0;i<20;i++)
{
putchar(name[i]);
}
printf("\n");
printf("string=%s\n", string);
return 0;
}
*/