Null Value VS Unknown Value in Framework Types

I utilize the ValueStringPointer method to access a value in a provider model (similar to this example) in plugin development with the framework. But I am confused about the difference between null value and unknown value.

In the docs, it said ValueStringPointer returns a pointer to the known string value, nil for a null value, or a pointer to "" for an unknown value. But what is considered as a null value and what’s considered as an unknown value? If the user never set that field in the template, would it be null or unknown?

My understanding (this is not the voice of authority):

If the attribute has Optional: true and Computed: false, the config and plan value for that attribute will be Null if the user didn’t set it. The attribute is not permitted to sprout a value during the apply phase.

If the attribute has Computed: true, the config and plan value for that attribute will be Unknown if the user didn’t set it. The provider is expected to supply a value, so it’s unknown only until the apply phase.

An attribute cannot be both Null and Unknown.