#include<stdio.h>
assert(src!=NULL) 断言 - 可以帮助知道代码错在哪里
#include <stdio.h>
//代码1
void test1()
{
int n = 10;
int m = 20;
int *p = &n;
*p = 20;//ok?
p = &m; //ok?
}
void test2()
{
//代码2
int n = 10;
int m = 20;
const int* p = &n;
*p = 20;//ok?
p = &m; //ok?
}
void test3()
{
int n = 10;
int m = 20;
int *const p = &n;
*p = 20; //ok?
p = &m; //ok?
}
int main()
{
//测试无cosnt的
test1();
//测试const放在*的左边
test2();
//测试const放在*的右边
test3();
return 0;
}
#include <stdio.h>
int main()
{
/* 1.
int num = 10;
int* p = #
*p = 20;
printf("%d\n", num);*/
//2.
//const 修饰变量,这个变量就被称为常变量,不能被修改,但是本质上还是变量
//
//const int num = 10;
num = 20; //error
//int n = 100;
//const int* p = #
const 修饰指针变量的时候
const 如果放在*号的左边,修饰的是*p,表示指针指向的内容,是不能通过指针来改变
但是指针变量本身是可以修改的
p 是指针变量 *p是指针指向的内容
*p = 20;//ERROR
//p = &n;//OK
//printf("%d\n", num);
//3.
const int num = 10;
//num = 20; //error
int n = 100;
int* const p = #
//const 修饰指针变量的时候
//const 如果放在*号的右边,修饰的是指针变量p,表示指针指变量不能被改变
//但是指针指针的内容,可以被改变
//p 是指针变量 *p是指针指向的内容
*p = 20;//OK
//p = &n;//ERROR
printf("%d\n", num);
return 0;
}
结论:
const
修饰指针变量的时候:
1. const
如果放在
*
的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改
变。但是指针变量本身的内容可变。
2.
const
如果放在
*
的右边,修饰的是指针变量本身,保证了指针变量的内容不能修改,但是指
针指向的内容,可以通过指针改变。
注
:
介绍《高质量
C/C++
编程》一书中最后章节试卷中有关
strcpy
模拟实现的题目。
练习:
模拟实现一个
strlen
函数
参考代码:
#include <stdio.h>
#include<assert.h>
//size_t - unsigned int 无符号整型,保证无负数
int my_strlen(const char* str)
{
int count = 0;
/*assert(str != NULL);*///保证指针的有用性 assert(str);
while (*str)//判断字符串是否结束
{
count++;
str++;
}
return count;
}
int main()
{
const char* p = "abcdef";
//测试
int len = my_strlen(p);
printf("len = %d\n", len);
return 0;
}